昨天安裝完了PostGIS,
今天我們就在GeoPandas做資料讀寫,
另外QGIS對於PostGIS支援度也很高,把資料匯入後,也可以使用QGIS對資料做讀寫。
大綱:
安裝完PostGIS,我們需要在DB中啟用
若未啟用postgis安裝完後在pgAdmin4或是psql輸入
postgres=# CREATE EXTENSION postgis;
為了用PostGIS匯入資料
我們使用data/Rail/Rail.shp
import geopandas as gpd
rail=gpd.read_file('data/Rail/Rail.shp',encoding='utf-8')
rail.crs = {'init' :'epsg:3826'}
rail=rail.to_crs(epsg=4326)
rail.head()
在GeoPandas,可以使用sqlalchemy建立資料庫連線的instance,對資料庫IO
from sqlalchemy import create_engine
engine = create_engine('postgresql://postgres:postgres@localhost:5432/postgres')
接著,使用to_sql這個方法,其中呢必須把geometry包成wkt element,由於一般使用geom作為PostGIS的空間屬性,這邊也一並處理
from geoalchemy2 import Geometry, WKTElement
rail['geom'] = rail['geometry'].apply(lambda x: WKTElement(x.wkt, srid=4326))
rail.drop('geometry', 1, inplace=True)
在to_sql的時候要設定連線實體、dtype(空間資料的坐標系統及幾何類型,如下:
rail.to_sql('rail', engine, if_exists='replace', index=False, schema='public',
dtype={'geom': Geometry('LINESTRING', srid= 4326)})
如果是其他的型別如,Point或Polygon,記得要修改
資料進PostGIS後,可以使用QGIS瀏覽、處理資料,有時需要編輯幾何資料的時候,使用QGIS很方便,熟悉QGIS的邦友可以使用DB Manager對PostGIS做操作
而剛剛的資料也可以在讀回Geopandas
sql='select * from public.rail '
df = gpd.GeoDataFrame.from_postgis(sql, engine, geom_col='geom' )
df
使用資料庫是資料處理及資料分析不可或缺的一環,在空間資料庫中,PostGIS非常方便,建議大家使用!